#include "cmsis_os2.h"
#include "lvgl.h"


extern osMutexId_t LvglMutexHandle;

lv_obj_t* parent_obj = NULL;
lv_obj_t* child_obj = NULL;

void obj_event_cb(lv_event_t * e)
{
    lv_obj_t* target = lv_event_get_target(e); /* 获取事件触发源 */
    {
        if (target == parent_obj) /* 判断触发源：是不是父对象？ */
        {
            /* 设置父对象的背景色：绿色 */
            lv_obj_set_style_bg_color(parent_obj, lv_color_hex(0x00FF00), 0);
        }
        else if (target == child_obj) /* 判断触发源：是不是子对象？ */
        {
            /* 重新设置子对象的位置：右侧居中，再向 X 轴偏移 100 */
            lv_obj_align(child_obj, LV_ALIGN_RIGHT_MID, 100, 0);
        }
    }
}

void StartLvglTask(void *argument)
{
    osMutexAcquire(LvglMutexHandle, osWaitForever);

    /* 获取当前显示屏幕的宽和高 */
    int32_t  with = lv_obj_get_width(lv_scr_act());
    int32_t  height = lv_obj_get_height(lv_scr_act());

    /* 创建一个父对象 */
    parent_obj = lv_obj_create(lv_scr_act());
    /* 设置父对象的大小 - 宽和高都是屏幕的 2/3 */
    lv_obj_set_size(parent_obj, with*2/3, height*2/3);
    /* 设置父对象的位置 - 顶部居中 */
    lv_obj_align(parent_obj, LV_ALIGN_TOP_MID, 0, 0);
    /* 设置父对象的背景色：浅蓝色 */
    lv_obj_set_style_bg_color(parent_obj, lv_color_hex(0x99ccff), 0);

    /* 创建一个子对象 */
    child_obj = lv_obj_create(parent_obj);
    /* 设置子对象的大小 - 宽和高都是父对象的 1/3 */
    lv_obj_set_size(child_obj, with/3, height/3);
    /* 设置子对象的位置 - 居中 */
    lv_obj_align(child_obj, LV_ALIGN_CENTER, 0, 0);
    /* 设置子对象的背景色：深蓝色 */
    lv_obj_set_style_bg_color(child_obj, lv_color_hex(0x003366), 0);

    /* 为父对象添加事件：长按触发 */
    lv_obj_add_event_cb(parent_obj, obj_event_cb, LV_EVENT_LONG_PRESSED, NULL);
    /* 为子对象添加事件：按下触发 */
    lv_obj_add_event_cb(child_obj, obj_event_cb, LV_EVENT_CLICKED, NULL);

    osMutexRelease(LvglMutexHandle);

    for(;;)
    {
        osMutexAcquire(LvglMutexHandle, osWaitForever);
        lv_timer_handler();
        osMutexRelease(LvglMutexHandle);
        osDelay(5);
    }
}
